package com.dainel.mybatis.demo.bean;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gitee.sunchenbin.mybatis.actable.annotation.*;
import com.gitee.sunchenbin.mybatis.actable.constants.*;

/**
 * 使用@Table 或 @TableName 自动创建表
 * 如果你的技术用到mybatis plus，可以单独只使用 @TableName，因为2者是兼容的
 * 更详细说明，请ctrl点击查看
 */
@Table(name = "gs_user")
@TableName("gs_user")

/**
 * 使用@TableComment 为数据库表添加备注信息，该备注信息可以通过Navicat 或者 DBserver等工具在数据库内查看，方便维护。
 * 更详细说明，请ctrl点击查看
 */
@TableComment("用户表")

/**
 * 使用 @TableEngine 指定数据库引擎，如果不设置默认是 InnoDB
 * 每个引擎都有各自的优势和使用场景，具体不阐述
 * 更详细说明，请ctrl点击查看
 */
@TableEngine(MySqlEngineConstant.InnoDB)

/**
 * 使用 @TableCharset 指定数据库编码，必须设置为 UTF8MB4，更详细说明，请ctrl点击查看
 */
@TableCharset(MySqlCharsetConstant.UTF8MB4)
public class UserBean {

    /**
     * 使用@Column指定字段名称、类型、长度等重要信息
     * isKey 用于指定该字段是否为主键
     * 更详细说明，请ctrl点击查看
     */
    @Column(name = "user_key", isKey = true, type = MySqlTypeConstant.VARCHAR, length = 64)

    /**
     * 使用@ColumnComment 设置字段备注，该备注信息可以通过Navicat 或者 DBserver等工具在数据库内查看，方便维护，更详细说明，请ctrl点击查看
     */
    @ColumnComment("主键")

    /**
     * @TableId 是MyBatisPlus的标注，用于指定表的主键，更详细说明，请ctrl点击查看
     */
    @TableId(value = "user_key")
    private String userKey;


    /**
     * 使用 @Unique 指定 唯一约束，更详细说明，请ctrl点击查看
     */
    @Unique

    /**
     * 使用 @Index 创建该字段的索引，更详细说明，请ctrl点击查看
     */
    @Index
    @ColumnComment("用户名")
    @Column(name = "username", type = MySqlTypeConstant.VARCHAR, length = 64)
    @TableField(value = "username")
    private String username;

    @ColumnComment("密码")
    @Column(name = "password", type = MySqlTypeConstant.VARCHAR, length = 64)
    @TableField(value = "password")
    private String password;

    @ColumnComment("所属账户组")
    @Column(name = "group_key", type = MySqlTypeConstant.VARCHAR, length = 64)
    @TableField(value = "group_key")

    /**
     * 使用@Foreign创建外键，更详细说明，请ctrl点击查看
     */
    @Foreign(
            name = "group_key",
            foreignColumn = "group_key",
            foreignTable = "gs_user_group"
    )
    private String groupKey;

    public String getUserKey() {
        return userKey;
    }

    public void setUserKey(String userKey) {
        this.userKey = userKey;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGroupKey() {
        return groupKey;
    }

    public void setGroupKey(String groupKey) {
        this.groupKey = groupKey;
    }
}
